iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 19
1
Security

我搶到旗子了!30天CTF入門系列 第 19

Day19[Forensics] 最難的熱身題

  • 分享至 

  • xImage
  •  

Forensics的大致上內容有分析檔案格式、封包分析、資訊隱藏等等各式題目,不過在這領域我沒有什麼經驗,所以還麻煩請多多指教了~

既然到了一個新的關卡我們就直接來看看熱身題吧


將檔案下載下來打開就看的到Flag囉


題目所提供的PNG檔案打不開,提示說作業系統要怎麼知道這個檔案是什麼類型的
這邊就利用一個指令
file

$ file flag.png 
flag.png: JPEG image data, JFIF standard 1.01, resolution (DPI), 
density 75x75, segment length 16, baseline, precision 8, 909x190, frames 3

可以看出他是一個JPG檔,那只要將他副檔名改為JPG就好了

mv flag.png flag.jpg

就可以成功打開圖片


一共有三個問題

  • 哪個source IP是最常出現的

  • 251.71.156.29 這個source IP 有幾個不重複的目的IP
    這個IP位址是隨機的

  • 這題比較難理解,我也是看了好久才看懂,如下,計算出來的結果要到小數第二位

    (1+1+1+1+2+1+1+1) / 8 = 1.13

    9個目的IP / 8種hash file

這邊利用python

#!/usr/bin/env python
import json
from pwn import *

input_file = open('incidents.json')
json_file = json.load(input_file)

r = remote('2018shell4.picoctf.com',10493)


def Q1():
    r.recvuntil('ones.\n')  
    src_ip_dict = {}    
    for i in json_file['tickets']:
        if i['src_ip'] in src_ip_dict:
            src_ip_dict[i['src_ip']] += 1
        else:
            src_ip_dict[i['src_ip']] = 0 
    r.sendline(max(src_ip_dict,key=src_ip_dict.get))
    x = r.recvline()
    print x

def Q2():
    r.recvuntil('source IP address ')
    src_ip = r.recvuntil('?\n')[:-2]
    dst_ip = []
    dst_ip_count = 0 
    for i in json_file['tickets']:
        if src_ip in i['src_ip'] and i['dst_ip'] not in dst_ip:
            dst_ip.append(i['dst_ip'])
            dst_ip_count += 1
    r.sendline(str(dst_ip_count))
    x = r.recvline()
    print x

def Q3():
    r.recvuntil('places.\n')
    file_hash_dict = {}
    for i in json_file['tickets']:
            if i['file_hash'] not in file_hash_dict :
                file_hash_dict[i['file_hash']] = []
            file_hash_dict[i['file_hash']].append(i['dst_ip'])
        sum = 0
        for i in file_hash_dict:
            sum += len(file_hash_dict[i])
        r.sendline(str(round(float(sum1)/float(len(file_hash_dict)),2)))
        
def main():
    Q1()
    Q2()
    Q3()
    x = r.recvuntil('}')
    print x

main()

import json可以將json轉換成python,程式裡面大多用到了 dictionary 這個資料結構還有list,json轉換過來就是dictionary所以可以很方便的對裡面的內容做運算,詳細的作法就自行參考程式碼


雖然說這題可以利用一個一個對照著看來解因為資料量不大,不過既然題目都說要寫程式了,就還是乖乖的寫程式,也可以加強自己對於python的能力


上一篇
Day18[Reverse] 魔鬼藏在細節裡
下一篇
Day20[Forensics] 工欲善其事,必先利其器
系列文
我搶到旗子了!30天CTF入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言